#ifndef CORE_BASE_H
#define CORE_BASE_H

typedef signed int s32;
typedef unsigned int u32;
typedef signed short s16;
typedef unsigned short u16;
typedef signed char s8;
typedef unsigned char u8;
typedef char c8;
typedef wchar_t c16;
typedef float f32;
typedef double f64;

#ifdef _MSC_VER
typedef signed __int64 s64;
typedef unsigned __int64 u64;
#else // linux
typedef signed long long s64;
typedef unsigned long long u64;
#endif // _MSC_VER

typedef char byte;
typedef char Byte;
typedef u16 ushort;
typedef u32 uint;
typedef u64 ulong;

static const int TYPE_CHECK_32_BIT[
	sizeof(s8) == 1 &&
		sizeof(s16) == 2 &&
		sizeof(s32) == 4 &&
		sizeof(s64) == 8 &&
		sizeof(f32) == 4 &&
		sizeof(f64) == 8] = {1};

#define LOOP(type, index, count) for (type index = 0; index < (count); ++index)
#define FOR_EACH(container, counter) for (u32 counter = 0; counter < (container).size(); ++counter)
#define ARRAY_SIZE(arr) (sizeof(arr)/(sizeof((arr)[0])))

#define null 0

#endif // CORE_BASE_H